console.log('-------------------') //控制台打印起始
const koa = require('koa') // 引用koa作为web开发框架（express原班人马打造，克服回调的一些问题）
const path = require('path')
require('./config/alias') // 引用别名
const toJson = require('./config/apiJson')
const utils = require('./config/utils')
const importain = require('./config/importainerFunction')
const koa_static = require('koa-static')
const koaBody = require('koa-body')
const jwt = require('koa-jwt')
const router = require('./routers/router')
// 静态资源目录对于相对入口文件index.js的路径
const staticPath = './static'
// 创建koa实例
const app = new koa()
/** 引入全局对象成Json返回模块 */
global.toJson = toJson
global.utils = utils
/** 启动静态文件访问 */
app.use(koa_static(
    path.join(__dirname, staticPath)
))


/** 捕获异常 */
app.use(importain.handler)
/** 权限控制 */
app.use(importain.author)
/** 上传文件模块中间件和处理post请求体的数据 */
app.use(koaBody({
    mutipart: true,
    pathchNode: true,
    multipart: true,
    formidable: {
        uploadDir: path.join(__dirname, `${staticPath}/upload`), // 设置文件上传目录
        keepExtensions: true,    // 保持文件的后缀
        maxFileSize: 200 * 1024 * 1024, // 设置文件大小限制，默认为2M
        onFileBegin: (name, file) => { // 文件上传前的设置
            // console.log(`name: ${name}`);
            // console.log(file);
        }
    },
    onError: function (err) {
        console.err(err)
    }
}))
/** 加密秘钥 */
const secret = 'see_you'
/** 注册秘钥和白名单 */
app.use(jwt({ secret }).unless({ path: [/\/register/, /\/api\/login/, /\/find_same_name/, /\/swagger/, /^\/upload/, /\/api\/file\/downLoad\/*/] }))

/** 路由 & 接口api */
app.use(router.routes())
/** 监听异常 */
app.on('error', function (err) {
    console.log('logging error ', err.message);
})
/** 监听3000端口 */
app.listen(8000)
console.log('服务启动在http://localhost:8000') // 控制台打印
